﻿using System.Collections.Generic;

namespace DimensionsHelper.Common.Contracts.DataCollector.Options;

/// <summary>
///     数据输出配置
/// </summary>
public class Export : INamedObject
{
    /// <summary>
    ///     当前输出的索引
    /// </summary>
    public int Index { get; set; }

    /// <summary>
    ///     输出数据索引时使用的表头名称，此名称也会作为前缀添加到各行的值上
    /// </summary>
    public string IndexName { get; set; } = string.Empty;

    /// <summary>
    ///     输出表格时的起始行
    /// </summary>
    public int StartRow { get; set; } = 1;

    /// <summary>
    ///     输出表格时的起始列
    /// </summary>
    public int StartColumn { get; set; } = 1;

    /// <summary>
    ///     是否添加默认的格式
    /// </summary>
    public bool Format { get; set; } = true;

    /// <summary>
    ///     输出表格的表头，包括行头或列头。
    /// </summary>
    public string[] Headers { get; set; } = [];

    /// <summary>
    ///     输出数据的数据类型名 - 对于数据类型名，将使用类型值检索列，填入数值并计算Gap；
    ///     对于其他类型，将使用类型名检索列，填入类型值，不考虑Gap。
    /// </summary>
    public string ValueAt { get; set; } = string.Empty;

    /// <summary>
    ///     是否聚合数据类型，如果配置了此属性值，将在输出表头检索类型值。
    /// </summary>
    public bool Aggregate { get; set; }

    /// <summary>
    ///     输出文件时使用的Gap
    /// </summary>
    public List<string> Gaps { get; set; } = [];

    /// <summary>
    ///     输出文件时使用的指定索引数据，其数据类型默认和输出数据类型名相同，并且只会输出表头配置中包含的索引数据
    /// </summary>
    public List<ExportIndex> Indices { get; set; } = [];

    /// <summary>
    ///     输出文件时，需要筛选掉的类型和对应名称。
    /// </summary>
    public List<ExportFilter> Filters { get; set; } = [];

    /// <summary>
    ///     输出文件时，需要按照值定义顺序排序（最终的替换值）的类型名。
    /// </summary>
    public string OrderBy { get; set; } = string.Empty;

    /// <summary>
    ///     输出表格的Sheet名
    /// </summary>
    public string Name { get; set; } = string.Empty;
}